from ui import ImageProcessorUI
from .base import ImageProcessor
from PIL import Image

class RotateProcessor(ImageProcessor):
    def process(self, image: Image.Image, **kwargs) -> Image.Image:
        """
        旋转图像。
        参数:
        - image: Image.Image - 输入的图像对象，类型为Pillow库中的Image.Image。
        - **kwargs: 关键字参数，必须包含 'angle'。
        返回:
        - Image.Image - 旋转后的图像对象，类型为Pillow库中的Image.Image。
        异常:
        - ValueError: 如果未提供 'angle' 参数。
        此函数要求必须提供图像的旋转角度，且不接受未指定这些参数的情况。
        """
        angle = kwargs.get('angle')
        if angle is None:
            raise ValueError("必须提供 angle 参数！")
        return image.rotate(angle)

    def get_ui_parameters(self, ui: "ImageProcessorUI") -> dict:
        try:
            direction = ui.rotate_direction_var.get()
            angle = int(ui.rotate_angle_entry.get())
            if direction == "Counterclockwise":
                angle = -angle
            return {"angle": angle}
        except ValueError:
            ui.show_error("请输入有效的角度数值")
            return {}